網站系統前端 40%
- 不要和DOM 奮戰了,擁抱MVVM(簡單來說就是資料的變化會反映到Html View的變化)
- 由於網站美工常用Booststrap搭配Jquery
- 推薦用VueJs因為和Booststrap及Jquery的PlugIn容易整合
 
中間層 20%
- 例如:ASP.NET MVC、JAVA Spring
- 當作MVC、Routing,資料拋轉就好
- 商務邏輯盡量不要寫在這裏
- 原因是資料皆從資料庫來,寫在這裡將資料庫拉到這裡,只是將事情複雜化和增多
- 太重物件導向是否是錯誤
 
資料庫層 40%
- 例如:MS SQL
- 商務邏輯盡可能寫在這,因為商務資料也在這
- 商務邏輯由於寫在DB層,過濾條件便須往後傳到SP,但並不是所有參數皆有值,如何處理參考如下
- 
SP過濾條件範例
 
- 善用Sql表達式(Expression)的特性,盡量少用程序語言的寫法
- 為每個資料表建立系統編號(uuid)
- 善用uuid當作外來鍵的參考,取得其他相關資料表內容
- 
取得資料表格結構說明
- 取得SP內容
DECLARE @spList varchar(max),
        @SpName varchar(500),  
        @sourceSP nvarchar(max), 
        @olddelim nvarchar(32) = char(13) + Char(10), 
        @newdelim nchar(1) = NCHAR(9999)
       
Declare @Result Table (no int identity(1,1) ,content nvarchar(500))
Set @spList= 'SPName1,'                             --SP1
Set @spList += 'SPName2,'                           --SP2  
DECLARE SPFile_cursor CURSOR FOR   
SELECT value FROM STRING_SPLIT(@spList, ',') WHERE RTRIM(value) <> '' 
OPEN SPFile_cursor  
FETCH NEXT FROM SPFile_cursor INTO @SpName  
  
WHILE @@FETCH_STATUS = 0  
BEGIN  
    Set @sourceSP = ''
    SELECT @sourceSP = OBJECT_DEFINITION(OBJECT_ID) 
    FROM sys.sql_modules where OBJECT_NAME(OBJECT_ID) = @SpName
    Insert into @Result (content)
    SELECT value FROM STRING_SPLIT(REPLACE(@sourceSP, @olddelim, @newdelim), @newdelim);
    FETCH NEXT FROM SPFile_cursor INTO @SpName  
End
CLOSE SPFile_cursor  
DEALLOCATE SPFile_cursor  
Select content From @Result order by no